<?php

namespace yak\layui\widgets\form;

use yii\helpers\Html;
use yii\helpers\Json;
use yii\web\JsExpression;
use yii\web\View;
use yii\widgets\InputWidget;

/**
 * Class TimeSelection
 * @package yak\layui\widgets\form
 */
class TimeSelection extends InputWidget
{
    public $endAttr;

    /**
     * @var string
     * type可选值	名称	用途
        year	年选择器	只提供年列表选择
        month	年月选择器	只提供年、月选择
        date	日期选择器	可选择：年、月、日。type默认值，一般可不填
        time	时间选择器	只提供时、分、秒选择
        datetime	日期时间选择器	可选择：年、月、日、时、分、秒
     */
    public $type = 'date';

    public $range = false;

    /**
     * @var string
     * 格式	示例值
        yyyy-MM-dd HH:mm:ss	2017-08-18 20:08:08
        yyyy年MM月dd日 HH时mm分ss秒	2017年08月18日 20时08分08秒
        yyyyMMdd	20170818
        dd/MM/yyyy	18/08/2017
        yyyy年M月	2017年8月
        M月d日	8月18日
        北京时间：HH点mm分	北京时间：20点08分
        yyyy年的M月某天晚上，大概H点	2017年的8月某天晚上，大概20点
     */
    public $format = 'yyyy-MM-dd';

    public $value = '';

    public $isInitValue = true;

    public $min = '';
    public $max = '';
    /**
     * @var string
     * 类型：String，默认值：focus，如果绑定的元素非输入框，则默认事件为：click
     */
    public $trigger = '';
    /**
     * @var bool
     * 如果设置: true，则控件默认显示在绑定元素的区域。通常用于外部事件调用控件，如：
     */
    public $show = false;

    /**
     * @var string
     * position 可选值	说明
        abolute	绝对定位，始终吸附在绑定元素周围。默认值
        fixed	固定定位，初始吸附在绑定元素周围，不随浏览器滚动条所左右。一般用于在固定定位的弹层中使用。
        static	静态定位，控件将直接嵌套在指定容器中。
        注意：请勿与 show 参数的概念搞混淆。show为 true 时，控件仍然是采用绝对或固定定位。而这里是直接嵌套
     */
    public $position = '';

    public $zIndex = 666666;

    public $showBottom = true; // - 是否显示底部栏

    /**
     * @var array
     * 类型：Array，默认值：['clear', 'now', 'confirm']
        右下角显示的按钮，会按照数组顺序排列，内置可识别的值有：clear、now、confirm
     */
    public $btns = [];

    public function run()
    {
        $id = $this->getId() . '-time-picker';
        $startId = $id . '-start';
        $endId = $id . '-end';
        echo Html::input('text', '', $this->value, ['id' => $id, 'class' => 'layui-input']);
        echo Html::activeHiddenInput($this->model, $this->attribute, ['id' => $startId, 'name' => $this->attribute]);
        if ($this->range) {
            echo Html::activeHiddenInput($this->model, $this->endAttr, ['id' => $endId, 'name' => $this->endAttr]);
        }

        $options = [
            'elem' => '#' . $id, //指定元素
            'type' => $this->type,
            'range' => $this->range,
            'format' => $this->format,
            'isInitValue' => $this->isInitValue,
            'min' => $this->min,
            'max' => $this->max,
            'trigger' => $this->trigger,
            'show' => $this->show,
            'position' => $this->position,
            'zIndex' => $this->zIndex,
            'showBottom' => $this->showBottom,
            'btns' => $this->btns,
            'done' => new JsExpression("function(value, date, endDate) {
                var d = value.split('~');
                layui.jquery('#{$startId}').val(d[0].trim());
                layui.jquery('#{$endId}').val(d[1].trim());
              }")
        ];

        $options = Json::encode(array_filter($options));
        $js = <<<JS
            layui.use(['laydate'], function(){
              var laydate = layui.laydate;
              laydate.render({$options});
            });
JS;
        $this->getView()->registerJs($js, View::POS_END);

    }
}